package cn.tedu.tmall.admin.mall.pojo.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.models.security.SecurityScheme;
import jakarta.validation.constraints.*;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

import java.io.Serializable;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@TableName("mall_category")
public class MallCategoryPO implements Serializable {
    @TableId(type = IdType.AUTO)
    Long id;
    /**
     * 类别名称：非空、长度1-4字符
     */
    @Schema(
            description = "类别名称（必填，长度1-4个字符，如“绿茶”“茶具”）",
            type = "string", // 符合OpenAPI规范（小写）
            required = true,
            example = "绿茶" // 给具体示例，前端更易理解
    )
    @NotBlank(message = "类别名称不能为空（不能是空格或空字符串）") // 非空校验（隐含长度≥1）
    @Size(max = 4, message = "类别名称长度不能超过4个字符") // 仅保留max，删除冗余的min=1
            String name;

    /**
     * 父类别ID：非空、数值≥1（顶级类别父ID通常为0，若业务允许0需调整@Min(0)）
     */
    @Schema(
            description = "父类别ID（必填，数值≥1；若为顶级类别，传0需提前确认业务规则）",
            type = "integer", // OpenAPI规范：Long/Integer均对应"integer"（区别于"int"，更通用）
            required = true,
            example = "1" // 给具体示例
    )
    @NotNull(message = "父类别ID不能为空") // 数值类型非空用@NotNull（而非@NotBlank）
    @Min(value = 1, message = "父类别ID必须大于等于1") // 限制数值范围（替代无效的@Size）
            Long parentId;

    /**
     * 深度：无需前端传值（注释保留，明确业务逻辑）
     */
    // Integer depth;

    /**
     * 是否启用：非空、仅允许0或1（1=启用，0=禁用）
     */
    @Schema(
            description = "是否启用（必填，1=启用，0=禁用）",
            type = "integer", // 不用"int"，OpenAPI中"integer"兼容Integer/Long
            required = true,
            example = "1" // 单独给示例，避免example包含说明（不规范）
    )
    @NotNull(message = "是否启用不能为空") // 补充非空校验
    @Min(value = 0, message = "是否启用仅支持0或1（0=禁用，1=启用）") // 限制最小值
    @Max(value = 1, message = "是否启用仅支持0或1（0=禁用，1=启用）") // 限制最大值
            Integer enable;

    /**
     * 是否在首页展示：非空、仅允许0或1（1=展示，0=不展示）
     */
    @Schema(
            description = "是否在首页展示（必填，1=展示，0=不展示）",
            type = "integer",
            required = true,
            example = "1"
    )
    @NotNull(message = "是否在首页展示不能为空") // 补充非空校验
    @Min(value = 0, message = "是否在首页展示仅支持0或1（0=不展示，1=展示）")
    @Max(value = 1, message = "是否在首页展示仅支持0或1（0=不展示，1=展示）")
    Integer depth;
    Integer isParent;
}
